const { defineConfig } = require('@vue/cli-service');
const { log } = require('console');
const fs = require('fs');
const path = require('path');

// Vue CLI 会自动加载 .env 文件中的环境变量，无需额外配置dotenv

// 证书文件和私钥文件路径
const certPath = path.join(__dirname, 'ssl', 'public.crt');
const keyPath = path.join(__dirname, 'ssl', 'private.key');
const caPath = path.join(__dirname, 'ssl', 'ca.crt');

// 检查文件是否存在
if (!fs.existsSync(certPath)) {
    console.error(`SSL 证书文件不存在: ${certPath}`);
}
if (!fs.existsSync(keyPath)) {
    console.error(`SSL 私钥文件不存在: ${keyPath}`);
}
if (!fs.existsSync(caPath)) {
    console.error(`SSL CA证书文件不存在: ${caPath}`);
}

module.exports = defineConfig({
    transpileDependencies: true,
    publicPath: './',
    devServer: {
        port: 7071,
        https: {
            key: fs.existsSync(keyPath) ? fs.readFileSync(keyPath) : null,
            cert: fs.existsSync(certPath) ? fs.readFileSync(certPath) : null,
            ca: fs.existsSync(caPath) ? fs.readFileSync(caPath) : null,
            rejectUnauthorized: false // 开发环境下允许自签名证书
        },
        client: {
            webSocketURL: 'wss://localhost:7071/ws' // 使用localhost避免证书域名不匹配问题
        },
        headers: {
            'Access-Control-Allow-Origin': '*', // 允许所有来源访问
            'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', // 允许的 HTTP 方法
            'Access-Control-Allow-Headers': 'Content-Type, Authorization' // 允许的 HTTP 头
        },
        historyApiFallback: true, //如果找不到对应的资源，就返回 index.html 文件
        allowedHosts: "all",
        // 修改和添加反向代理配置
        proxy: {
            '/ws': {
                target: process.env.VUE_APP_WS_URL || 'wss://unit.sangu.js.cn:8081',
                ws: true,
                secure: false, // 在开发环境可以设置为 false 忽略证书验证
                changeOrigin: true,
                logLevel: 'debug', // 输出代理日志
                pathRewrite: {
                    '^/ws': '/ws' // 保留路径，匹配目标服务器端点
                },
                timeout: 10000 // 设置超时时间为10秒，避免ETIMEDOUT
            },
            // 添加对后端接口的代理
            '/api': {
                target: process.env.VUE_APP_BASEURL || 'https://unit.sangu.js.cn:8081',
                changeOrigin: true,
                secure: false,
                pathRewrite: {
                    '^/api': ''
                }
            },
        },
        webSocketServer: false
    },
    chainWebpack: config => {
        config.plugin('html').tap(
            args => {
                args[0].title = "三谷工具库";
                return args;
            })
    }
})
